package com.yzjs.sms.service;

import com.esms.MessageData;
import com.esms.PostMsg;
import com.esms.common.entity.Account;
import com.esms.common.entity.GsmsResponse;
import com.esms.common.entity.MTPack;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Service
public class SmsService {

    private static PostMsg pm = new PostMsg("sms.chutianyun.gov.cn", 8090);// 发送器 建议单例配置


    // 账户信息
    @Value("${sms.account}")
    private String account;

    // 密码
    @Value("${sms.password}")
    private String password;



    /**
     * 短信下发范例
     *
     *            发送密码
     * @param phone
     *            接收方手机号
     * @param content
     *            短信内容
     */
    public  GsmsResponse doSendSms( String phone, String content) throws Exception {
        MTPack pack = buildDefaultSMSPack();
        pack.addMsg(MessageData.getInstance(phone, content));

        /**
         * 设置模板编号(静态模板将以模板内容发送;
         * 动态模板需要发送变量值，JSON格式：[{"key":"变量名1","value":"变量值1"},{"key":"变量名2","
         * value":"变量值2"}])
         */
        Account ac = new Account(account, password);
        GsmsResponse resp = pm.post(ac, pack);
        return resp;
    }

    /**
     * 创建默认下行批次 消息类型：短信； 发送方式；群发； 业务类型：0； 是否去重：否
     */
    private static MTPack buildDefaultSMSPack() {
        return buildMtPack("测试批次", MTPack.MsgType.SMS, MTPack.SendType.MASS, 0, false);
    }

    /**
     * @param batchName
     *            批次名称
     * @param msgType
     *            消息类型
     * @param sendType
     *            发送方式
     * @param biztype
     *            业务类型根据自己的业务类型编号配置
     * @param distinctFlag
     *            是否去重
     */
    private static MTPack buildMtPack(String batchName, MTPack.MsgType msgType, MTPack.SendType sendType, int biztype,
                                      boolean distinctFlag) {
        MTPack pack = new MTPack();
        pack.setBatchID(UUID.randomUUID());
        pack.setBatchName(batchName);
        pack.setMsgType(msgType);
        pack.setBizType(biztype);
        pack.setDistinctFlag(distinctFlag);
        pack.setSendType(sendType);
        List<MessageData> msgs = new ArrayList<MessageData>();
        pack.setMsgs(msgs);
        return pack;
    }



}
